<?php
/**
 * Контроллер управления пользователями фронт-енда
 * 
 * @category Phorm
 * @package Controller_Module_Default
 * @name /Phorm/Controller/Module/Default/Users.php
 * @copyright phorm.ru
 * @since 06.01.2011
 * @author vladimir@kachalov.net
 */

class Phorm_Controller_Module_Default_Users extends Phorm_Controller_Controller {
	
	/**
	 * Экземпляр класса пользователей
	 * @var Phorm_User
	 */
	private $User;
	
	
	/**
	 * Предиспетчер
	 * 
	 * @return void
	 */
	
	public function preDispatch() {
		
		$this->User = new Phorm_User();
		
	}
	
	/**
	 * Главная страница
	 * 
	 * @return void
	 */
		
	public function indexAction() {	
						
	}
	
	
	/**
	 * Авторизация
	 * 
	 * @return void
	 */
		
	public function signinAction() {
			
		if(isset($this->_params["login"]) && isset($this->_params["passw"])) {
				
			if($UserInfo = $this->User->getUserInfo(array("username"=>$this->_params["login"],"passw"=>md5($this->_params["passw"])))) {
					
				if($UserInfo["visible"]=="yes") {
						
					if($this->User->isAllowedHost($UserInfo)) {
					
						$this->User->_usersession->UserData = $UserInfo;
							
						$this->User->saveUserInfo(array("userid"=>$UserInfo['userid'],'lastvisit'=>time(),'lastip'=>$this->_request->getClientIp()));
							
						if(isset($this->User->_usersession->Refferer)) {
								
							return $this->_redirect($this->User->_usersession->Refferer);
								
						} else {
								
							return $this->_redirect($this->cnf["site"]["url"]);
								
						}
						
					} else {
							
						$this->view->assign("Errors",array($this->_translate->_("Доступ с вашего IP запрещен")));
							
					}
					
				} else {
						
					$this->view->assign("Errors",array($this->_translate->_("Ваша учетная запись неактивна")));
						
				}
					
			} else {
					
				$this->view->assign("Errors",array($this->_translate->_("Неверное имя пользователя или пароль")));
					
			}
				
		}
			
	}
	
	
	/**
	 * Форма регистрации нового пользователя
	 * 
	 * @return null
	 */
		
	public function signupAction() {
			
		$form = $this->User->getSignupForm();
			
		if($_POST) {

			if($form->isValid($_POST)) {
					
				$FormData = $form->getValues();
				
				unset($FormData["repassw"],$FormData["reemail"],$FormData["Send"],$FormData["captcha"]);	
				
				$FormData = $this->User->saveUserInfo($FormData);
					
				$this->User->sendSignupEmail($FormData);
					
				$this->view->assign("FormData",$FormData);
					
				return $this->_forward("signupsuccess",null,null,array("action"=>"signupsuccess"));
					
			} else {
					
				$this->view->assign("Errors",array($this->_translate->_("При заполнении формы были обнаружены ошибки")));
					
			}
				
		}

		$this->view->assign("Form",$form);
						
	}
	
	
	/**
	 * Вывод сообщения об успешной регистрации
	 * 
	 * @return void
	 */
		
	public function signupsuccessAction() {
			
		if(!isset($this->_params["isfwd"])) {
				
			return $this->_redirect($this->cnf["site"]["url"]);
				
		}
			
	}
	
	
	/**
	 * РазАвторизация
	 * 
	 * @return null
	 */
		
	public function signoutAction() {
			
		$this->User->_usersession->UserData = $this->User->getUserInfo(array("userid"=>0));
		return $this->_redirect($this->cnf["site"]["url"]);
			
	}
	
	
	/**
	 * Активация учетной записи пользователя
	 * 
	 * @return null
	 */
		
	public function activateAction() {
			
		if(isset($this->_params["userid"]) 
			&& isset($this->_params["token"]) 
			&& $UserInfo = $this->User->getUserInfo(
								array("userid"=>$this->_params["userid"],
									  "tokenvisible" => $this->_params["token"]))) {
									  	
			$this->User->saveUserInfo(array("userid"=>$UserInfo["userid"],"visible"=>"yes","tokenauth"=>md5(uniqid())));
				
			$this->view->assign("Success",array($this->_translate->_("Ваша учетная запись успешно активирована")));
							
							
		} else {
				
			$this->view->assign("Errors",array($this->_translate->_("Пользователь с указанными данными не найден")));
				
		}
			
	}
	
	
	/**
	 * Редактирование собственного профиля 
	 * 
	 * @return void
	 */
		
	public function profileAction() {
		
		if($this->_usersession->UserData['userid'] > 0 && $UserInfo = $this->User->getUserInfo(array('userid'=>$this->_usersession->UserData['userid']))) {
			
			$form = $this->User->getProfileForm();
			
			$form->setDefaults($UserInfo);
			
			if($this->_request->isPost()) {
				
				$FormData = $this->_request->getPost();
				
				// Нередактируемые поля
				$FormData['userid'] = $UserInfo['userid'];
				$FormData['username'] = $UserInfo['username'];
				
				if($form->isValid($FormData)) {
					$FormData = $form->getValues();
					unset($FormData['signed'],$FormData['lastvisit']);
					if($FormData = $this->User->saveUserInfo($FormData)) {
						$this->User->_usersession->UserData = $this->User->getUserInfo(array('userid'=>$FormData['userid']));
						return $this->composeSuccessMessage('Изменения внесены','/users/profile/');
					} else {
						$this->composeTransactionErrorMessage($this->User->_errors);
					}
				}
				
			}
			
			$this->view->assign('Form',$form);
			
		} else {
			
			return $this->composeErrorMessage('Пользователь с указанным Id не найден','/users/');
			
		}
			
	}
	
}